% Ejercicio "Gramática"
\subsection*{\fbox{\theejercicio} - Sentencia {\tt try-catch-finally}}

Para el tratamiento de excepciones en tiempo de ejecuci\'on, el lenguaje JAVA incluye un mecanismo de control basado en sentencias {\tt try-catch-finaly}. La sintaxis (simplificada) de este tipo de sentencias viene dada por la siguiente gram\'atica: 

\begin{center}
\begin{tabular}{|lcl|} \hline
                       &               &                                                 \\
{\em Sentencia}        & $\rightarrow$ & {\em Sent-excepci\'on}                          \\
                       & $|$           & {\em SENT}                                      \\
{\em Sent-excepci\'on} & $\rightarrow$ & {\em Parte-try Parte-catch Parte-finally}       \\
{\em Parte-try}        & $\rightarrow$ & {\tt try} {\bf \{} {\em Sentencia} {\bf \}}     \\
{\em Parte-catch}      & $\rightarrow$ & $\varepsilon$                                   \\
                       & $|$           & {\em Parte-catch} {\tt catch} {\bf (}{\em TIPO VAR}{\bf ) \{}  {\em Sentencia} {\bf \}} \\
{\em Parte-finally}    & $\rightarrow$ & $\varepsilon$                                   \\
                       & $|$           & {\tt finally} {\bf \{} {\em Sentencia} {\bf \}} \\
                       &               &                                                 \\ \hline
\end{tabular}
\end{center}

En donde {\em SENT} representa cualquier sentencia del lenguaje, {\em TIPO} es un identificador del tipo de excepci\'on que se produce y {\em VAR} es un identificador de variable. (A los efectos de este problema pueden considerarse como s\'{\i}mbolos terminales de la gram\'atica).

\smallskip

Se pide hallar una gram\'atica equivalente a la anterior que cumpla la condici\'on LL(1) y construir para ella las tabla de an\'alisis.

\begin{center}
\begin{tabular}{|l|} \hline
\verb@try {@                               \\
\verb@     try {@                          \\
\verb@          @{\em SENT}                \\
\verb@     }@                              \\
\verb@     catch (IOException e) {@        \\
\verb@          @{\em SENT}                \\
\verb@     }@                              \\
\verb@catch (ArrayOutOfBoudException e) {@ \\
\verb@     @{\em SENT}                     \\
\verb@}@                                   \\
\verb@catch (ArithmeticException e) {@     \\
\verb@     @{\em SENT}                     \\
\verb@}@                                   \\
\verb@finally {@                           \\
\verb@     @{\em SENT}                     \\
\verb@}@                                   \\ \hline
\end{tabular}
\end{center}

% Solución del ejercicio
\subsubsection*{SOLUCI\'ON}

La siguiente gram\'atica cumple la condici'on LL(1):

\begin{center}
\begin{tabular}{|llcl|} \hline
        &                        &               &                                                 \\
{\tt 0} & {\em Axioma}           & $\rightarrow$ & {\em Sentencia}                                 \\
{\tt 1} & {\em Sentencia}        & $\rightarrow$ & {\em Sent-excepci\'on}                          \\
{\tt 2} &                        & $|$           & {\em SENT}                                      \\
{\tt 3} & {\em Sent-excepci\'on} & $\rightarrow$ & {\em Parte-try Parte-catch Parte-finally}       \\
{\tt 4} & {\em Parte-try}        & $\rightarrow$ & {\tt try} {\bf \{} {\em Sentencia} {\bf \}}     \\
{\tt 5} & {\em Parte-catch}      & $\rightarrow$ & $\varepsilon$                                   \\
{\tt 6} &                        & $|$           & {\em Parte-catch} {\tt catch} {\bf (}{\em TIPO VAR}{\bf ) \{} {\em Sentencia} {\bf \}} {\em Parte-catch} \\
{\tt 7} & {\em Parte-finally}    & $\rightarrow$ & $\varepsilon$                                   \\
{\tt 8} &                        & $|$           & {\tt finally} {\bf \{} {\em Sentencia} {\bf \}} \\
        &                        &               &                                                 \\ \hline
\end{tabular}
\end{center}

Hallando los s\'{\i}mbolos directores de cada regla puede construirse la tabla LL(1):

\begin{footnotesize}
\begin{center}
\begin{tabular}{|l|ccccccccccc|} \hline
                       & {\em SENT} & {\em TIPO} & {\em VAR} & {\tt try} & {\tt catch} & {\tt finally} & {\bf (} & {\bf )} & {\bf \{} & {\bf \}} & {\bf \$} \\ \hline
{\em Sentencia}        &  2         &            &           &  1        &             &               &         &         &          &          &          \\
{\em Sent-excepci\'on} &            &            &           &  3        &             &               &         &         &          &          &          \\
{\em Parte-try}        &            &            &           &  4        &             &               &         &         &          &          &          \\
{\em Parte-catch}      &            &            &           &           &  6          &  5            &         &         &          &  5       &  5       \\
{\em Parte-finally}    &            &            &           &           &             &  8            &         &         &          &  7       &  7       \\ \hline
\end{tabular}
\end{center}
\end{footnotesize}